使用strongswan 搭建站点到站点tunnel

搭建环境:

两台strongswang 运行在Azure云上一个虚拟网络的虚机里,有内部IP和公网IP

strongswan服务器vpn1
网络空间 10.250.250.0/24
内部IP地址 10.250.250.69
外部公网IP地址 139.219.133.12
共享密匙 /etc/strongswan/ipsec.secrets

strongswan 服务器vpn2
网络空间 10.10.50.0/24
内部IP地址 10.10.50.4
外部公网IP地址 42.159.93.91
共享密匙 /etc/strongswan/ipsec.secrets

架构图

子网[10.250.250.0/24]---->[可配对内网卡]vpn1[10.250.250.69]--|防火墙|--[139.219.133.12]--->internet---[42.159.93.91]--|防火墙|-->[10.10.50.4]vpn2[可配对内网卡]---->子网[10.10.50.0/24]

环境变量

## 两台vpn服务器上设置
1
2
3
4
5
6
7
8
9
10
11
12
cat >> /etc/sysctl.conf << EOF

## 开启转发
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
## 禁止重定向,比如禁止ICMP重定向报文
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

EOF

sysctl -p

防火墙配置

## 两台vpn服务器上设置

firewall-cmd --permanent --add-service=ipsec
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

共享密匙

## 两台vpn服务器上设置
## psk 前面的是leftid 和 rightid, 两服务器都一样
1
2
3
4
cat > /etc/strongswan/ipsec.secrets << EOF
192.168.222.4 139.219.99.158 : PSK 'sharedsecret'

EOF

strongswan 服务器1 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cat > /etc/strongswan/ipsec.conf << EOF

config setup
uniqueids = no

conn ss
closeaction=restart
dpdaction=restart

ike=aes256-sha1-modp1024
esp=aes256-sha1
reauth=no
keyexchange=ikev2 # Mandatory for Dynamic / Route-based gateway
mobike=no
ikelifetime=28800s
keylife=3600s
keyingtries=%forever
authby=secret

#auto=route # 这不知有何所用,所以先不用

## strongswan在防火墙后通过NAT转发,必须设置leftid rightid
left=10.250.250.69 # 如果vpn服务器在防火墙后,只配有内网IP, 此处必须填虚机面向vpn连接的内网IP,而不是strongswan虚机所在Azure云的外网IP;如果虚机上直接配有公网IP,则填公网IP,如阿里云。
leftsubnet=10.250.250.0/24 # 内部子网,多网段用逗号隔开
leftid=139.219.133.12 # local instance ip (strongswan), 此处填公网IP,也可以填内网IP,也可以设置一个字符id,比如vpn1,但必须和ipsec.secrets里对应

right=42.159.93.91 # 这里必须填对端vpn服务器的公网IP
rightid=42.159.93.91 # 此值必须对应ipsec.secrets, 可以是公网IP地址,也可以设置一个字符id,比如vpn2,但必须和ipsec.secrets里对应
rightsubnet=10.10.50.0/24 # 对端VPN服务器子网,多网段用逗号隔开

auto=start

EOF

strongswan 服务器2 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
cat > /etc/strongswan/ipsec.conf << EOF

config setup
uniqueids = no

conn ss
closeaction=restart
dpdaction=restart

ike=aes256-sha1-modp1024
esp=aes256-sha1
reauth=no
keyexchange=ikev2
mobike=no
ikelifetime=28800s
keylife=3600s
keyingtries=%forever
authby=secret

#auto=route

left=10.10.50.4
leftsubnet=10.10.50.0/24
leftid=42.159.93.91

right=139.219.133.12
rightid=139.219.133.12
rightsubnet=10.250.250.0/24
auto=start

EOF

vpn 服务器上系统路由添加

## vpn 1:

ip route add 10.10.50.0/26 dev <连接对端vpn的网卡设备名> 

## vpn 2:

ip route add 10.250.250.0/26 dev <连接对端vpn的网卡设备名> 

子网客户端系统路由添加

## vpn 1 所在子网的客户端添加路由, 10.250.250.69是vpn服务的连接内网的ip地址(如果双网卡)
ip route add 10.10.50.0/26 via 10.250.250.69

## vpn 2 所在子网的客户端添加路由, 10.10.50.4是vpn服务的连接内网的ip地址(如果双网卡)
ip route add 10.250.250.0/26 via 10.10.50.4

Azure平台设置

平台不做设置,只能vpn服务器ping通对端子网地址,而子网内的客户端不能ping通对端子网或对端VPN服务器

如果VPN是架在Azure平台上,必须设置:

1. vpn虚机连接对端vpn网卡上的转发功能必须开启。

2. 添加路由表

    服务器1 端的路由表的设置:

    地址前缀: 10.10.50.0/24     ## 对端vpn的子网
    下一跳类型: 虚拟设备
    下一跳地址: 10.250.250.69   ## VPN服务器的连接内网的IP地址(如果是采用双网卡)

    在把路由表绑定到本端子网,这些子网需要通过此vpn连接对端子网。



    服务器2 端的路由表的设置:

    地址前缀: 10.250.250.0/24     ## 对端vpn的子网
    下一跳类型: 虚拟设备
    下一跳地址: 10.10.50.4        ## VPN服务器的连接内网的IP地址(如果是采用双网卡)

    在把路由表绑定到本端子网,这些子网需要通过此vpn连接对端子网。

3. 安全组需要开通4500/udp 500/udp

aws 平台

需要关闭VPN服务器网卡默认的“源/目标检查”,默认为开启状态

需要设置平台路由表和安全组

具体没操作过,此略。

参考

https://wiki.strongswan.org/projects/strongswan/wiki/UsableExamples